En la teoria de la codificació, els codis de bloc són una gran i important família de codis de correcció d'errors que codifiquen dades en blocs. Hi ha un gran nombre d'exemples de codis de bloc, molts dels quals tenen una àmplia gamma d'aplicacions pràctiques.[1] La definició abstracta dels codis de bloc és útil conceptualment perquè permet als teòrics de codificació, matemàtics i informàtics estudiar les limitacions de tots els codis de bloc d'una manera unificada. Aquestes limitacions solen prendre la forma de límits que relacionen diferents paràmetres del codi de bloc entre si, com ara la seva velocitat i la seva capacitat per detectar i corregir errors.[2]
Exemples de codis de bloc són els codis Reed-Solomon, els codis Hamming, els codis Hadamard, els codis Expander, els codis Golay i els codis Reed-Muller. Aquests exemples també pertanyen a la classe de codis lineals i, per tant, s'anomenen codis de blocs lineals. Més concretament, aquests codis es coneixen com a codis de blocs algebraics, o codis de blocs cíclics, perquè es poden generar mitjançant polinomis booleans.[3]
Els codis de blocs algebraics solen ser descodificats mitjançant descodificadors algebraics.
El terme codi de bloc també pot referir-se a qualsevol codi de correcció d'errors que actua sobre un bloc de bits de dades d'entrada per produir bits de dades de sortida . En conseqüència, el codificador de blocs és un dispositiu sense memòria. Sota aquesta definició codis com ara codis turbo, codis convolucionals acabats i altres codis descodificables iterativament (codis semblants a turbo) també es considerarien codis de bloc. Un codificador convolucional no acabat seria un exemple de codi sense bloc (sense marc), que té memòria i, en canvi, es classifica com a codi d'arbre.[4]